#include <bits/stdc++.h>
#include <string>
using namespace std;

// �ַ�����ֵ
void test1()
{
	string s1 = "hello ";
	string s2 = s1;
	string s3(6, 'a');
	cout << s1 << endl
		 << s2 << endl
		 << s3 << endl;
}

// �����ַ���
void test2()
{
	string s1;
	cin >> s1;
	// cin�����ո�����ֹ
	cout << s1 << endl;
}
void test3()
{
	string s1;
	getline(cin, s1);
	// getline�����ո���ֹ
	cout << s1 << endl;
}

// �ȴ�С��string ������<,>,=���Ƚ�
void test4()
{
	string s1, s2;
	s1 = "abc";
	s2 = "edf";
	if (s1 < s2)
		cout << "<" << endl;
}

// �ַ���ƴ��
void test5()
{
	string s1, s2, s3, s4;
	s1 = "jsfg";
	s2 = "dixch ";
	// ��+����ǰ��˳��
	s3 = s1 + s2;
	s4 = s2 + s1;
	cout << s3 << endl
		 << s4 << endl;
	s1 += 'a'; // ���ﲻҪд��s1=s1+'a';��Ϊʱ�临�Ӷȴ�
	cout << s1 << endl;

	// ʹ�õ�����		s1.append(s2):��s2ƴ�ӵ�s1��ĩβ������s1
	s1 = "hello";
	s2 = "world";
	s1.append(s2);
	cout << s1 << endl;
}

// ���ַ�������(������'\0')  ����д��
void test6()
{
	string s1, s2;
	s1 = "hdfhg sfg";
	s2 = "hello world ";
	int l = s1.size();
	cout << l << endl;
	l = s2.length();
	cout << l << endl;
}

// �����ַ���
void test7()
{
	string s1 = "hassg 7458hdfg hdruiy8 ", s2 = "abc";
	// s1.find(s2):����s2��s1���ֵĵ�һ���ַ��ĵ�һ��λ��(�±��0��ʼ)��δ�ҵ�����-1
	int p = s1.find(s2);
	cout << p << " ";
	p = s1.find("745");
	cout << p << endl;

	// s1.find(s2,a,b) : ��s1[a]��ʼ����s2��ǰb���ַ�����λ��,����ֵͬ��
	p = s1.find("745", 4, 2);
	cout << p << endl;
}

// ��ȡ�Ӵ�
void test8()
{
	string s1 = "Hello,world ", s2;
	// s2=s1.substr(a,b):�ӵ�a���ַ���ʼ��ȡs1���±��0��ʼ������ȡb��
	s2 = s1.substr(0, 5);
	cout << s2 << endl;
}

// ���ң����������һ�����ֵģ����ش������ҵ�λ�ã�
void test9()
{
	string s1 = "Hfjkdf7 aruhkdg123 ", s2 = "kd";
	int p = s1.rfind(s2);
	cout << p << endl;
}

// ���ң������ַ�λ�ã�
void test10()
{
	string s1 = "ajsgfkdd ghsay ", s2 = "asdkz";
	// s1.find_first_of(s2):s2�е������ַ���s1�г��ֵĵ�һ��λ�ã��±��0��ʼ��
	cout << s1.find_first_of(s2) << endl;
	// s1.find_last_of(s2):s2�������ַ���s1�г��ֵ����һ��λ��
	cout << s1.find_last_of(s2) << endl;
	// s1.find_first_not_of(s2):s1�е�һ����s2û�еĳ��ֵ��ַ�λ��
	cout << s1.find_first_not_of(s2) << endl;
}

// �������
void test11()
{
	string s1 = "shdf sh", s2 = "af7";
	// s1.insert(n,s2,m)��s1�ĵ�n��λ�ò���s2
	s1.insert(3, s2);
	cout << s1 << endl;

	s1 = "abcdef hijk";
	// s1.insert(a,s2,n,m):��s1�ĵ�a��λ��(�±��0��ʼ)����s2�ĵ�n����m���ַ� (�±��1��ʼ)
	s1.insert(1, s2, 1, 2);
	cout << s1 << endl;

	s1 = "abcd efg";
	// s1.insert(n,"asdf",m):��s1�ĵ�n��λ�ò���s2��ǰm���ַ�
	s1.insert(1, "asdf", 2); //"asdf"������s2����
	cout << s1 << endl;

	s1 = "abcd efg";
	// s1.insert(n,m,c):��s1�ĵ�n��λ�ò���m���ַ�c
	s1.insert(3, 10, 'z');
	cout << s1 << endl;
}

// ʹ�õ���������
void test12()
{
	string s = "abcdef gh";
	// i��ָ��
	for (auto i = s.begin(); i != s.end(); i++)
	{
		cout << *i << " ";
	}
	cout << endl;
	// c��char����
	for (auto c : s)
	{
		cout << c << " ";
	}
	cout << endl;
}

// �ַ�������
void test13()
{
	string s1 = "hello";

	// s2(s1,n):��s1�ĵ�n��λ�ÿ�����s2
	string s2(s1, 1);
	cout << s2 << endl;

	// s3(s1,n,m):��s1�ĵ�n��λ�ÿ�ʼ����m���ַ���s3,�����ȳ���s1�Ϳ��������һλ
	string s3(s1, 0, 3);
	cout << s3 << endl;
	string s4(s1, 2, 10);
	cout << s4 << endl;

	// s5=s1.substr(n):��s1�ĵ�n��λ��(�±��0��ʼ)��ʼ����m���ַ���s5
	// �����������Ĭ��n==0,m==sizeof(s1) ,n���ܳ���s1�ĳ���
	string s5 = s1.substr(2, 2);
	cout << s5 << endl;
}

// ɾ���ַ�
void test14()
{
	string s1 = "hello";
	// s1.erase(n,m):��s1�ĵ�n��λ�ã��±��0��ʼ����ʼ��ɾ��m���ַ�
	// ��������Σ������s1 ---> s1.erase();
	// ���ֻ��n����nλ�ú��涼��� ---> s1.erase(n)
	s1.erase(1, 2);
	cout << s1 << endl;

	s1 = "hello";
	// ʹ�õ�����	s1.erase(n):ɾ��s1�ĵ�n��λ�õ��ַ������ص�����
	s1.erase(s1.begin() + 2);
	cout << s1 << endl;

	s1 = "hello";
	// ʹ�õ�����	 ɾ�������� [n,m)������ַ�
	s1.erase(s1.begin(), s1.begin() + 2);
	cout << s1 << endl;
}

void test15()
{
	string s1 = " hello thanks hh", s2 = "world";
	// s1.replace(n,m,s2,a,b):�ӵ�n��λ�ÿ�ʼɾ��s1��m���ַ�,���ڵ�n��λ�ò���s2�ĵ�a���ַ�����b���ַ�
	s1.replace(7, 6, s2, 3, 4);
	cout << s1 << endl;
	// s1.replace(n,m,k,'a'):�ӵ�n��λ�ÿ�ʼɾ��s1��m���ַ������ڵ�n��λ�ò���k���ַ�a
	s1.replace(7, 2, 5, 'a');
	cout << s1 << endl;
}

int main()
{
	// test1();		//��ֵ
	// test2();		//���� �������ո�
	// test3();		//���루���ո�
	// test4();		//�ȴ�С
	//	test5();		//ƴ��
	// test6();		//�󳤶�
	// test7();		//����(��������)
	// test8();		//��ȡ�Ӵ�
	// test9();		//���ң���������
	// test10();		//���ң������ַ�λ�ã�
	test11(); // �������
	// test12();		//ʹ�õ���������
	// test13();		//�ַ�������
	// test14();		//ɾ���ַ���
	// test15();		//�滻����

	return 0;
}
